package com.xscha.tableforge.service;

import com.xscha.tableforge.model.dto.FieldMetaDto;
import com.xscha.tableforge.model.entity.FieldMeta;
import com.xscha.tableforge.model.vo.PageReq;
import com.xscha.tableforge.model.vo.PageResult;

import java.util.List;

/**
 * 字段元数据服务接口
 * 提供字段元数据的管理功能
 */
public interface FieldMetaService {

    /**
     * 根据ID查询字段元数据
     *
     * @param id 字段ID
     * @return 字段元数据对象
     */
    FieldMeta findById(String id);

    /**
     * 根据表ID查询所有字段元数据
     *
     * @param tableId 表ID
     * @return 字段元数据列表
     */
    List<FieldMeta> findAllByTableId(String tableId);

    /**
     * 根据表ID分页查询字段元数据
     *
     * @param tableId 表ID
     * @param pageRequest 分页请求参数
     * @return 分页结果
     */
    PageResult<FieldMeta> findPageByTableId(String tableId, PageReq pageRequest);

    /**
     * 创建字段元数据
     *
     * @param fieldMetaDto 字段元数据DTO
     * @param userId 创建者用户ID
     * @return 创建成功的字段元数据
     */
    FieldMeta createFieldMeta(FieldMetaDto fieldMetaDto, String userId);

    /**
     * 批量创建字段元数据
     *
     * @param fieldMetaDtos 字段元数据DTO列表
     * @param tableId 表ID
     * @param userId 创建者用户ID
     * @return 创建成功的字段元数据列表
     */
    List<FieldMeta> batchCreateFieldMetas(List<FieldMetaDto> fieldMetaDtos, String tableId, String userId);

    /**
     * 更新字段元数据
     *
     * @param id 字段ID
     * @param fieldMetaDto 字段元数据DTO
     * @param userId 更新者用户ID
     * @return 更新后的字段元数据
     */
    FieldMeta updateFieldMeta(String id, FieldMetaDto fieldMetaDto, String userId);

    /**
     * 删除字段元数据
     *
     * @param id 字段ID
     * @param userId 删除者用户ID
     */
    void deleteFieldMeta(String id, String userId);
}